草庐IT

c++ - Swig -includeall 除了...

全部标签

c++ - "factor out"公共(public)字段有什么办法可以节省空间?

我有一个大数组(>数百万)Item,其中每个Item都具有以下形式:structItem{void*a;size_tb;};有一些不同的a字段——这意味着有许多项具有相同的a字段。我想“分解”这些信息以节省大约50%的内存使用量。但是,问题在于这些Item具有重要的顺序,并且可能会随着时间的推移而改变。因此,我不能继续为每个不同的a创建一个单独的Item[],因为那样会丢失项目之间的相对顺序。另一方面,如果我存储size_tindex;字段中所有项目的顺序,那么我将失去因删除void*a;字段。那么有没有办法让我在这里真正节省内存,或者没有?(注意:我已经可以想到例如使用unsigne

c++ - 使用自动工具从 C++ 使用 C 代码

我正在用一些用C编写的代码编写(我的第一个)C++类,但我只能通过在externblock中声明C函数来编译C++。我的项目使用自动工具;有什么方法可以自动执行此过程,这样我就不必维护两个头文件了吗? 最佳答案 在C代码头文件中的#ifdef中使用externblock头文件开始#ifdef__cplusplusextern"C"{#endif...在头文件的末尾#ifdef__cplusplus}#endif这样它就可以同时包含在C和C++源代码中 关于c++-使用自动工具从C++使用

c++ - 在 Mac OSX 和 Linux 下使用 printf 语句进行类型转换

我有一些代码在MacOSX和Linux(Ubuntu、Fedora等)下表现不同。这是关于printf语句中算术运算中的类型转换。代码使用gcc/g++编译。以下内容#includeintmain(){floatdays=(float)(153*86400)/86400.0;printf("%f\n",days);floatfoo=days/30.6;printf("%d\n",(int)foo);printf("%d\n",(int)(days/30.6));return0;}在Linux上生成153.00000054在MacOSX上153.00000055为什么?令我惊讶的是,这适

c++ - 如何在 VS C++ 6.0 中递增枚举?

我复制并粘贴了一些递增枚举的代码:myenum++;这段代码在VS.NETC++2003中编译时运行良好我现在在VS6.0中开发并得到错误:errorC2676:binary'++':'enumID'doesnotdefinethisoperatororaconversiontoatypeacceptabletothepredefinedoperator如何让它在6.0中表现相同? 最佳答案 我认为在一个易于理解的枚举上定义operator++没有任何问题。这不就是运算符重载的目的吗?如果上下文没有意义(例如其中有漏洞的枚举),那么

c++ - 如何在 C 或 C++ 中复制文本文件?

当试图将文本文件A复制到另一个文件B时,可能有以下几种方法:1)逐字节2)逐字逐句3)逐行哪个效率更高? 最佳答案 使用缓冲区:#includeintmain(){std::ifstreaminFile("In.txt");std::ofstreamoutFile("Out.txt");outFileC++fstreams在内部进行缓冲。他们使用有效的缓冲区大小(尽管人们怎么说流的效率:-)。因此,只需将一个流缓冲区复制到一个流中,很快,内部魔法就会将一个流有效地复制到另一个流。但是学习使用std::copy()一个字符一个字符地执

c++ - 如何返回复杂的返回值?

目前我正在编写一些汇编语言程序。正如一些惯例所说,当我想向调用者返回一些值时,比如一个整数,我应该在EAX寄存器中返回它。现在我想知道如果我想返回一个float、一个double、一个枚举,甚至是一个复杂的结构怎么办。如何返回这些类型的值?我可以想到在EAX中返回一个指向内存中实际值的地址。但这是标准方式吗?非常感谢~~~ 最佳答案 如果调用者是您的代码,则完全取决于您。如果调用者不受您的控制,您必须遵循他们现有的约定或共同制定您自己的约定。例如,在x86平台上,当FPU指令处理浮点运算时,函数的结果作为FPU寄存器堆栈的顶部值返回

c++ - 如何在 C++ 中的 2 个函数集之间切换?

有没有办法,我可以有效地在2个相似的函数集(C/C++)之间切换?为了更好地解释我的意思,假设我有两组全局函数,例如:voida_someCoolFunction();voida_anotherCoolFunction(intwithParameters);…voidb_someCoolFunction();voidb_anotherCoolFunction(intwithParameters);…而且我希望能够在运行时在我的程序中“切换”使用哪个。但是:我不想在每个函数中都有一个if条件,例如:voidinlinesomeCoolFunction(){if(someState=A_S

c++ - C/C++ 中两个 INT_MAX 数字的乘积不正确

在我的例子中,两个INT_MAX数字的乘积是296447233,这是不正确的。longlongintproduct=0;product=2137483647*2137483647;printf("product:%lli\n",product);我做错了什么,如何纠正??谢谢! 最佳答案 你的两个2137483647都是int类型。所以他们保持那种类型并溢出。让它们longlong:product=2137483647LL*2137483647LL;或投:product=(longlong)2137483647*2137483647

c# - 为什么 C 和 C++ 中的 float / double 没有除余运算?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whydoesmodulusdivision(%)onlyworkwithintegers?此代码不适用于C和C++,但适用于C#和Java:floatx=3.4f%1.1f;doublex=3.4%1.1;此外,除法余数在Python中定义为实数。在C和C++中没有为float和double定义此操作的原因是什么?

c++ - GCC -Wunused-function 不起作用(但其他警告有效)

我试图通过使用GCC的-Wunused-function标志在我的代码库中找到未使用的函数。如我所料,使用gcc-Wall-Wunused-functionmain.cpp编译以下代码会打印一个unusedvariable警告:warning:unusedvariable‘x’[-Wunused-variable]但是,编译器不会给出unused-function警告。我该怎么做才能让GCC注意到未使用的函数foo()?//main.cppvoidfoo(){}//should(butdoesn't)trigger'unusedfunction'warningintmain(intar